/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package banco_imobiliario.model;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Andre
 */
public class Jogador implements JogadorSubject {

    private String nome;
    private Peca peca;
    private double dinheiro;
    private Dado dado1;
    private Dado dado2;
    protected List<JogadorObserver> observers = new ArrayList<>();
    private int qtdRodadasNaPrisao = 0;

    public void assumeAVez() {
    }

    public void fazerJogada() {
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setPeca(Peca peca) {
        this.peca = peca;
    }

    public Dado getDado1() {
        return dado1;
    }

    public void setDado1(Dado dado1) {
        this.dado1 = dado1;
    }

    public Dado getDado2() {
        return dado2;
    }

    public void setDado2(Dado dado2) {
        this.dado2 = dado2;
    }

    public Integer retornaValoresDados() {
        return dado1.getValorDaFace() + dado2.getValorDaFace();
    }

    public String getNome() {
        return nome;
    }

    public Peca getPeca() {
        return peca;
    }

    public void creditar(double valor) {
        dinheiro += valor;
        notifyObservers(0);
    }

    public boolean debitar(double valor) {
        if (verificaDinheiro(valor)) {
            dinheiro -= valor;

            notifyObservers(0);
            return true;

        } else {
            return false;
        }
    }

    public Logradouro obterLocalizacao() {
        return peca.getLocalizacao();
    }

    public void estabelecerLocalizacao(Logradouro casa) {
        peca.setLocalizacao(casa);
        System.out.println("estebelecer Localizacao: " + casa.getNome());
        casa.atingida(this);
    }

    public double getDinheiro() {
        return dinheiro;
    }

    public void setDinheiro(double dinheiro) {
        this.dinheiro = dinheiro;
    }

    public boolean verificaDinheiro(double dinheiro) {
        if (this.dinheiro >= dinheiro) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public void addObserver(JogadorObserver obs) {
        observers.add(obs);
    }

    @Override
    public void delObserver(JogadorObserver obs) {
        observers.remove(obs);
    }

    @Override
    public void notifyObservers(int indice) {
        if (!observers.isEmpty()) {
            observers.get(0).update(indice);
        }
    }

    public JogadorObserver retornarObserver() {
        return observers.get(0);
    }

    public int getQtdRodadasNaPrisao() {
        return qtdRodadasNaPrisao;
    }

    public void setQtdRodadasNaPrisao(int qtdRodadasNaPrisao) {
        this.qtdRodadasNaPrisao = qtdRodadasNaPrisao;
    }
}
